package co.gov.medellin.sdep.sisdep.domain;

import java.text.MessageFormat;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;

import javax.faces.model.ListDataModel;

import co.gov.medellin.sdep.sisdep.common.AppConstants;

/**
 * <p>
 * Clase que contiene los metodos y las constantes que se utilizan en todos los
 * Controllers.
 * </p>
 * <p>
 * Copyright (c) 2011<BR>
 * Consult-Soft S.A.<BR>
 * Created on: Oct 30, 2011<BR>
 * 
 * @author atabares
 * </p>
 */
public class BaseController extends FacesController implements
		java.io.Serializable {

	/** Serial key. */
	private static final long serialVersionUID = 1L;

	//----------------------------------------------------------------------
	//--- DESDE ESTE PUNTO SON LAS INSTANCIACIONES QUE PUEDEN HACERSE
	//--- DE LOS DAO INIT()
	//----------------------------------------------------------------------

	/** Interface que encapsula las funcionalidades del modulo Administrativo. */
	//private IMasterList masterList;
	
	//----------------------------------------------------------------------
	//--- DESDE ESTE PUNTO SON LAS INSTANCIACIONES QUE PUEDEN HACERSE
	//--- DE LOS DAO END()
	//----------------------------------------------------------------------
	
	/**
	 * Obtiene el archivo de mensajes de la aplicacion.
	 * @param propertiesPath path para buscar el properties.
	 * @return prop Objeto utilizado para obtener los mensajes del archivo properties.
	 */
	private PropertyResourceBundle getMessageProperties(String propertiesPath) {
		return (PropertyResourceBundle) ResourceBundle.getBundle(propertiesPath);
	}
	
	/**
	 * Obtiene el mensaje asociado al codigo pasado como parametro.
	 * @param code Codigo del mensaje que se desea obtener.
	 * @return String Mensaje obtenido desde el archivo de propiedades de mensajes.
	 */
	public String getMessage(String code) {
		return this.getMessageProperties(MessageModalWindowController.MESSAGES).getString(code);
	}

	/**
	 * Obtiene el mensaje asociado al codigo pasado como parametro y reemplaza los argumentos.
	 * @param code Codigo del mensaje que se desea obtener.
	 * @param args Argumentos que seran reemplazados en el mensaje.
	 * @return String Mensaje parametrizado obtenido desde el archivo de propiedades de mensajes.
	 */
	public String getMessage(String code, Object[] args) {
		MessageFormat message = 
				new MessageFormat(this.getMessageProperties(MessageModalWindowController.MESSAGES).getString(code));
		
		return message.format(args);
	}
	
	//----------------------------------------------------------------------
	//--- SETTERS Y GETTERS DE DAOS init()
	//----------------------------------------------------------------------
	
	/**
	 * Obtiene el parametro masterList.
	 * @see BaseController#masterList
	 *
	 * @return El parametro masterList.
	 */
	//public IMasterList getMasterListDAO() {
		//if (masterList == null) {
			//masterList = (IMasterList) factory.getDAO(MASTER_LIST_DATA_ACCESS);
			//PENDIENTE
		//}
		//return masterList;
	//}
	
	//----------------------------------------------------------------------
	//--- SETTERS Y GETTERS DE DAOS end()
	//----------------------------------------------------------------------
	
	//IConfiguracionService configuracionService;

	//public IConfiguracionService getConfiguracionService() {
	//	if(configuracionService == null){
			//esta es la configuracion de Servlet API
			//configuracionService = (IConfiguracionService)getServletContext().getAttribute("configuracionService");
	//		ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
	//		configuracionService = (IConfiguracionService)servletContext.getAttribute("configuracionService");
	//	}
	//	return configuracionService;
	//}

	//public void setConfiguracionService(IConfiguracionService configuracionService) {
	//	this.configuracionService = configuracionService;
	//}
	
	//IConfiguracionService configuracionService = (IConfiguracionService) getServletContext().getAttribute("configuracionService");

	public String cancelMenu() {
		return AppConstants.REGULACION_MENU_VIEW;
	}

	/**
	 * funcion que convierte un String value a un String[]
	 * array
	 * 
	 * @param stringValue
	 * @return string array
	 */
	public String[] stringToStringArray(String stringValue) {
		String[] arr = new String[stringValue.length()];
		for (int i = 0; i < stringValue.length(); i++) {
			arr[i] = String.valueOf(stringValue.charAt(i));
		}
		return arr;
	}
	/**
	 * funcion que convierte un String value a un String[]
	 * array
	 * 
	 * @param stringValue
	 * @return string array
	 */
	public String stringArrayToString(String[] stringArray) {
		String arrValue = new String("");
		for (int i = 0; i < stringArray.length; i++) {
			arrValue = arrValue + stringArray[i];
		}
		return arrValue;
	}
	
}